

const path = require('path');
const mime = require('mime');
const fs = require('mz/fs');

/**
 * 
 * @param {url}  类似 '/static/'URL前缀     
 * @param {dir} 一个目录   __dirname + '/static'
 * @returns 返回一个async函数 
 */
function staticFiles(url, dir) {

    return async (ctx, next) => {

        let rpath = ctx.request.path;

        console.log("请求的路径--->", rpath)
        
        // 判断是否以指定的url开头:
        if (rpath.startsWith(url)) {

            /**
             * 获取 请求路径中 的文件名，然后跟 服务器中的静态资源文件 基本路径 拼接
             * 这里 从 /static开始截断，跟 dir 拼接起来，得到完整的 服务器文件路径
             * rpath = /static/css/bootstrap.css , url = /static/
             * rpath.substring(url.length) = css/bootstrap.css
             * fp = D:\testDemo\Koa-Demo\static\css\bootstrap.css
             */
            let fp = path.join(dir, rpath.substring(url.length));

            console.log("文件的路径--->",fp,"----",rpath.substring(url.length))

            // 判断文件是否存在:
            if (await fs.exists(fp)) {

                // 查找文件的mime:
                ctx.response.type = mime.lookup(rpath);

                // 读取文件内容并赋值给response.body:
                ctx.response.body = await fs.readFile(fp);
                
            } else {

                // 文件不存在:
                ctx.response.status = 404;
                ctx.response.body="我找不到文件 ok？"
            }
        } else {

            // 不是指定前缀的URL，继续处理下一个middleware:
            await next();
        }
    };
}

module.exports = staticFiles;